<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP 命令模式应用程序类
 */
class App
{

    /**
     * 执行应用程序
     * @access public
     * @return void
     */
    static public function run()
    {
        //加载动态项目公共文件和配置,zzy,20140904
        load_ext_file();


        if(C('URL_MODEL')==1){ // PATHINFO 模式URL下面 采用 index.php module/action/id/4
            $depr = C('URL_PATHINFO_DEPR');
            $path = isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:'';
            if(!empty($path)){
                $params = explode($depr,trim($path,$depr));
            }


            // 定义项目基础加载路径,zzy,20140904
            define('BASE_LIB_PATH', (defined('GROUP_NAME') && C('APP_GROUP_MODE')==1) ? APP_PATH.C('APP_GROUP_PATH').'/'.GROUP_NAME.'/' : LIB_PATH);
            if(defined('GROUP_NAME')) {
                if(1 == C('APP_GROUP_MODE')){ // 独立分组模式
                    $config_path    =   BASE_LIB_PATH.'Conf/';
                    $common_path    =   BASE_LIB_PATH.'Common/';
                }else{ // 普通分组模式
                    $config_path    =   CONF_PATH.GROUP_NAME.'/';
                    $common_path    =   COMMON_PATH.GROUP_NAME.'/';
                }
                // 加载分组配置文件
                if(is_file($config_path.'config.php'))
                    C(include $config_path.'config.php');
                // 加载分组别名定义
                if(is_file($config_path.'alias.php'))
                    alias_import(include $config_path.'alias.php');
                // 加载分组函数文件
                if(is_file($common_path.'function.php'))
                    include $common_path.'function.php';
            }
            // 定义项目基础加载路径,zzy,20140904,end

            // 取得模块和操作名称

            define('MODULE_NAME',!empty($params)?ucfirst(array_shift($params)):C('DEFAULT_MODULE'));
            //模块名首字母大写的修正,zzy,20140829
            //define('MODULE_NAME',   !empty($params)?array_shift($params):C('DEFAULT_MODULE'));
            define('ACTION_NAME',!empty($params)?array_shift($params):C('DEFAULT_ACTION'));
            if(count($params)>1){
                // 解析剩余参数 并采用GET方式获取
                preg_replace('@(\w+),([^,\/]+)@e','$_GET[\'\\1\']="\\2";',implode(',',$params));
            }
        }else{ // 默认URL模式 采用 index.php module action id 4
            // 取得模块和操作名称
            define('MODULE_NAME',isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:C('DEFAULT_MODULE'));
            define('ACTION_NAME',isset($_SERVER['argv'][2])?$_SERVER['argv'][2]:C('DEFAULT_ACTION'));
            if($_SERVER['argc']>3){
                // 解析剩余参数 并采用GET方式获取
                preg_replace('@(\w+),([^,\/]+)@e','$_GET[\'\\1\']="\\2";',implode(',',array_slice($_SERVER['argv'],3)));
            }
        }

        // 执行操作
        //$module = A(MODULE_NAME);

        //添加分组配置文件,zzy,20140904
        $group  = defined('GROUP_NAME')&&C('APP_GROUP_MODE')==0?GROUP_NAME.'/':'';
        $module = A($group.MODULE_NAME);

        if(!$module){
            // 是否定义Empty模块
            $module = A("Empty");
            if(!$module){
                // 抛出错误让自定义错误机制（phplog)能够捕获
                ErrorLog::phplog(new Exception('HTTPSTATUS:404 ' . L('_MODULE_NOT_EXIST_') . '，URI：' . $_SERVER['REQUEST_URI']));
                // 模块不存在 抛出异常
                throw_exception(L('_MODULE_NOT_EXIST_').MODULE_NAME);
            }
        }
        call_user_func(array(
            &$module,
            ACTION_NAME
        ));
        // 保存日志记录
        if(C('LOG_RECORD')){
            Log::save();
        }
        return;
    }
}

;